package com.zyl.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * @version v1.0
 * @ProjectName: env_gather
 * @Package: com.zyl.utils
 * @ClassName: JdbcUtil
 * @Description TODO(Jdbc工具类)
 * @Author 翟玉龙
 * @Date 2024/10/22-9:53
 */
public class JdbcUtil {
    private static final DataSource pool;
    static {
        // 读取数据库配置文件数据

        try(InputStream in = JdbcUtil.class.getClassLoader()
                .getResourceAsStream("db.properties")) {
            // 创建Properties集合，用于存储文件中的配置信息
            Properties prop = new Properties();
            // 加载文件中符合格式的数据到集合中
            prop.load(in);

            // 根据数据库连接资源，创建数据库连接池
            pool = DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 从数据库连接池中获取对象
     * 如果池中存在空闲的连接对象，直接返回
     * 否则新创建一个对象返回
     * @return 数据库连接对象
     * @throws SQLException SQL异常
     */
    public static Connection getConnection() throws SQLException {
        return pool.getConnection();
    }

    /**
     * 执行DML语句封装过程
     * @param sql 待执行的sql语句
     * @return 执行sql影响的数据条数
     * @throws SQLException SQL异常
     */
    public static int executeUpdate(String sql) throws SQLException {
        // 获取资源
        Connection conn = getConnection();
        Statement state = conn.createStatement();
        // 执行sql
        int count = state.executeUpdate(sql);
        // 关闭资源
        close(conn, state);
        return count;
    }

    public static void close(Connection conn, Statement state) throws SQLException {
        if(state != null) {
            state.close();
        }
        if(conn != null) {
            conn.close();
        }
    }
}
